#pragma once
#include "RenderSystemPrereq.h"

namespace Graphics{
	class GraphicsFactory{
	public:
		static RenderSystemPtr createRenderSystem(RenderMode &mode, RenderSystemPlatform platform);
		static GUIManagerPtr createGUIManager();

		static boost::shared_ptr<RenderTarget> createRenderTarget(Texture2DPtr texture);
		static boost::shared_ptr<VertexBuffer> createVertexBuffer(VertexDataPtr verts);
		static boost::shared_ptr<IndexBuffer> createIndexBuffer(IndexDataPtr inds);
		static PixelShaderPtr createPixelShader(std::string &filename);
		static VertexShaderPtr createVertexShader(std::string &filename);
		static ComputeShaderPtr createComputeShader(std::string &filename);
		static Texture2DPtr createTexture2D(std::string &filename,Texture2D::ShaderResourceSlot slot);
		static Texture2DPtr createEmptyTexture2D(int width, int height, int multisample, Texture2D::ShaderResourceSlot slot, TextureFormat format);
		static TextureCubePtr createTextureCube(std::string& top, std::string& bottom, std::string& left, std::string& right, std::string& front, std::string& back);

		static RenderContext *m_renderContext;

		friend class RenderSystem;
	};
}